const express = require('express');
const app = express();
const cors = require('cors');

const session = require('express-session');

app.use(
  session({
    cookie: {
      // 设置 cookie相关的配置
      // 可以配置 sessionid 的过期时间啊 什么的
    },
    secret: 'yuanjin', // 加密 sessionId的密钥
    name: 'sessionid', // 字段名
  })
); // 自动给发送过来的 cookie 里面没有 sessionid 的请求 设置上 sessionid 然后 给 cookie 里面带了 sessionid 的 请求头设置上sessionid 对应的value session 属性
// res.session = value
// 我们 可以给这个 res.session 对象 里面存 任何的值

// 这个中间件 会在服务器里面存 {sessionid:value} 存在数据库 还是内存里面 看具体设置 存内存里面的话 服务器重启 数据就没了

// 映射public目录中的静态资源
const path = require('path');
const staticRoot = path.resolve(__dirname, '../public');
app.use(express.static(staticRoot));

const whiteList = ['null', 'http://localhost:5008'];
app.use(
  cors({
    origin(origin, callback) {
      if (whiteList.includes(origin)) {
        callback(null, origin);
      } else {
        callback(new Error('not allowed'));
      }
    },
    credentials: true,
  })
);

// 加入cookie-parser 中间件
// 加入之后，会在req对象中注入cookies属性，用于获取所有请求传递过来的cookie
// 加入之后，会在res对象中注入cookie方法，用于设置cookie
const cookieParser = require('cookie-parser');
app.use(cookieParser());

// 应用token中间件
app.use(require('./tokenMiddleware'));

// 解析 application/x-www-form-urlencoded 格式的请求体
app.use(express.urlencoded({ extended: true }));

// 解析 application/json 格式的请求体
app.use(express.json());

// 处理 api 的请求
app.use('/api/student', require('./api/student'));
// app.use("/api/book", require("./api/book"));
// app.use("/api/class", require("./api/class"));
app.use('/api/admin', require('./api/admin'));

// 处理错误的中间件
app.use(require('./errorMiddleware'));

const port = 5008;
app.listen(port, () => {
  console.log(`server listen on ${port}`);
});
